package com.ph.shopping.facade.product.service;

import java.util.List;
import java.util.Map;

import com.ph.shopping.common.util.page.PageBean;
import com.ph.shopping.common.util.result.Result;
import com.ph.shopping.facade.product.entity.PhProduct;
import com.ph.shopping.facade.product.entity.PhProductImage;
import com.ph.shopping.facade.product.entity.PhProductPropertyVal;
import com.ph.shopping.facade.product.vo.PhProductVo;

/**
 * @项目：phshopping-facade-product @描述： 商品查询与逻辑删除service实现类 @作者： hewl
 * @创建时间：2017年3月6日 上午11:15
 * @Copyright by hewl
 * @version 1.0.0
 */
public interface IProductService {

	/**
	 * 商品查看单条/多条详情记录查询(不要使用分页查询)
	 * 
	 * @author hewl
	 */
	List<PhProductVo> getProductVoDetail(PhProductVo phProductVo) throws Exception;

	/**
	 * 商品分页列表查询
	 * 
	 * @author hewl
	 */
	Result getProductVoPageList(PageBean pageBean, PhProductVo phProductVo) throws Exception;

	/**
	 * 商品列表查询
	 * 
	 * @author hewl
	 * @param PhProductVo
	 * @return List<PhProductVo>
	 */
	List<PhProductVo> getProductVoList(PhProductVo phProductVo) throws Exception;

	/**
	 * 商品图片查询
	 * 
	 * @author hewl
	 * @param phProductVo
	 * @return List<PhProductVo>
	 */
	Map<String, Object> getProductVoImageList(PageBean pageBean, PhProductVo phProductVo) throws Exception;

	/**
	 * 单条商品列表查询
	 * 
	 * @author hewl
	 * @param PhProductVo：id
	 * @return PhProductVo
	 */
	PhProductVo getPhProductVo(PhProductVo phProductVo) throws Exception;

	/**
	 * 逻辑删除商品
	 * 
	 * @author hewl
	 * @param phProductVo:id
	 * @return Result
	 */
	Result deleteLogicPhProduct(PhProductVo phProductVo) throws Exception;

	/**
	 * @description: 修改的商品 1.所有金额转换操作 2.图片和属性值的修改方式是删除所有之前的记录, 新增当前的记录
	 * @param phProduct
	 *            实体
	 * @param imageList
	 *            图片集合
	 * @param pvList
	 *            属性值集合
	 * @return Result
	 * @throws Exception
	 * @author lichao
	 * @date 2017年3月15日
	 */
	Result updateProduct(PhProduct phProduct, List<PhProductImage> imageList, List<PhProductPropertyVal> pvList)
			throws Exception;

	/**
	 * 商品添加方法
	 * 
	 * @param phProduct
	 * @param imageList
	 * @param ppvList
	 * @return
	 * @throws Exception
	 * @author yyg
	 */
	Result addProduct(PhProduct phProduct, List<PhProductImage> imageList, List<PhProductPropertyVal> ppvList)
			throws Exception;

	/**
	 * 审核商品
	 * 
	 * @author hewl
	 * @param phProductVo:id-auditState
	 * @return Result
	 */
	Result auditPhProduct(PhProductVo phProductVo) throws Exception;

	/**
	 * 商品上架、下架
	 * 
	 * @author hewl
	 * @param phProductVo:id-saleNoSaleStatus
	 * @return Result
	 */
	Result onsalPhProduct(PhProductVo phProductVo) throws Exception;

	/**
	 * 通过商品id查询商品集合
	 * 
	 * @param productIds
	 * @return
	 */
	Result getPhProductList(List<Long> productIds);

	/**
	 * 扣除商品数量
	 * 
	 * @param phProductVo
	 * @return
	 */
	Result reduceStock(PhProductVo phProductVo);

	/**
	 * 
	 * @description: 根据分类id获取商品数量
	 * @param classifyId
	 * @return
	 * @author lichao
	 * @date 2017年3月28日
	 */
	Integer getProductCountByClassify(Long classifyId);
}
